Apache DolphinScheduler 海豚调度器自定义时间参数 您所在的位置:网站首页 DolphinScheduler海豚调度 Apache DolphinScheduler 海豚调度器自定义时间参数

Apache DolphinScheduler 海豚调度器自定义时间参数

2024-01-09 00:09| 来源: 网络整理| 查看: 265

在Apache DolphinScheduler 海豚调度器(本文简称:小海豚) 官网中,我们看到其自定义时间的参数是这样介绍的

1.支持代码中自定义变量名,声明方式:${变量名}。可以是引用 "系统参数" 或指定 "常量"。

2.我们定义这种基准变量为 [...] 格式的,[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等

3.也可以使用以下格式:

* 后 N 年:$[add_months(yyyyMMdd,12*N)] * 前 N 年:$[add_months(yyyyMMdd,-12*N)]

* 后 N 月:$[add_months(yyyyMMdd,N)] * 前 N 月:$[add_months(yyyyMMdd,-N)] * 后 N 周:$[yyyyMMdd+7*N] * 前 N 周:$[yyyyMMdd-7*N] * 后 N 天:$[yyyyMMdd+N] * 前 N 天:$[yyyyMMdd-N] * 后 N 小时:$[HHmmss+N/24] * 前 N 小时:$[HHmmss-N/24] * 后 N 分钟:$[HHmmss+N/24/60] * 前 N 分钟:$[HHmmss-N/24/60]

以上是可以满足大部分时间需求,但有些我们会受到常规java逻辑思维影响,导致不能很好的使用这些自定时间。

比如:$[yyyyMM-1],首先我们会受到java思维的影响,认为yyyyMM-1就是当上一个月的年月时间。实际上,$[yyyyMM-1]表示的是昨天的年月。

一般小海豚自定义时间格式有两种:

1.调用函数add_months()函数的:这种是用来加减月份的。

这种有两个参数,第一个是返回时间的格式(如yyyyMM,202012),第二个加减多少个月(如,输入-2,则代表前2个月的时间)

2.直接+-数字的:这种用来加减天数的。

这种直接输入数字的,不管你输入的时间格式是yyyyMM或者是HHHHmmss都无所谓,这个数字只代表加减多少天(比如-2,就代表两天前的时间)

他的自定义时间规律是这样的:先进行加减月/日计算,再将其转化为指定格式输出。

就拿上述的$[yyyyMM-1]来说,它是先对当前时间进行减去一天,然后再转换为yyyyMM的格式输出。打个比方:今天是2020年03月02日,那么他会“2020年03月02日”减去一天,就得到“2020年03月01日”这个数据,接着再转化为yyyyMM输出,输出202003。

我们java传统意义上的yyyyMM-1是指当前月份的上个月。比如,今天是2020年03月02日,yyyyMM-1之后会输出202002,这是java编程中的思维,跟小海豚的思维还是有点不一致。

小海豚自定义时间参数中遇到的问题:

我在大数据批处理中,有时候会碰到一些每天更新的月表数据(比如有张统计累计会员人数的月表,用于统计当月的累计会员人数,每天都在更新并同步到BI可视化系统中)(其实更应该叫日表,但需求就是统计周期为月,但每天要更新数据)

小海豚会在今天的凌晨拉取昨天的数据进行计算,将昨天的数据同步到可视化系统中。

一开始我是按照正常的写法,让数仓将$[yyyyMM] (当月)的数据同步到BI可视化系统中并每天更新。一开始是没问题的,都会同步当月的数据,毕竟今天是2020年03月02日获取的就是202003(2020年03月)

但到了月初的第一天,就会出现问题。

比如2020年03月31日,$[yyyyMM]输出202003,会将2020年03月的数据同步到可视化系统(此时小海豚还是抽取昨天2020年03月30日的数据进行累加计算出数据),此时同步是没问题的。

到了2020年04月01日,小海豚会抽取昨天(2020年03月31日)的数据进行累加,按道理更新的应该是昨天3月份的数据,但是!!!$[yyyyMM]输出的是202004,而此时4月份没有数据,因此没有更新!!!

到了2020年04月02日,小海豚抽取昨天(2020年04月01日)的数据进行4月份累加,$[yyyyMM]输出的是202004 ,更新4月份数据。

此时从数仓同步到可视化系统的3月份数据就会少了31日,导致明明数仓数据正确,可是到了可视化系统时就不准了。此时不理解的人就会在骂小海豚有bug,可你输入的指令$[yyyyMM]获取的是今天的月份,你的业务要求你更新昨天的月份。

正确做法是将$[yyyyMM]替换成$[yyyyMM-1],$[yyyyMM-1]代表昨天的年月,跟我们数仓抽取昨天的数据进行计算业务吻合。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有